package cn.source.service.impl;

import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import cn.source.domain.ArtContent;
import cn.source.mapper.ArtContentMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.source.mapper.ArtInforMapper;
import cn.source.domain.ArtInfor;
import cn.source.service.ArtInforService;

/**
 * 【文章】Service业务层处理
 * 
 * @author sourcebyte.vip
 * @date 2024-11-04
 */
@Service
public class ArtInforServiceImpl implements ArtInforService
{
    @Autowired
    private ArtInforMapper artInforMapper;

    @Autowired
    private ArtContentMapper contentMapper;

    /**
     * 查询【文章】
     * 
     * @param id 【文章】主键
     * @return 【文章】
     */
    @Override
    public ArtInfor selectArtInforById(Long id)
    {
        return artInforMapper.selectArtInforById(id);
    }

    /**
     * 查询【文章】列表
     * 
     * @param artInfor 【文章】
     * @return 【文章】
     */
    @Override
    public List<ArtInfor> selectArtInforList(ArtInfor artInfor)
    {
        return artInforMapper.selectArtInforList(artInfor);
    }

    /**
     * 新增【文章】
     * 
     * @param artInfor 【文章】
     * @return 结果
     */
    @Override
    public int insertArtInfor(ArtInfor artInfor)
    {
        ArtContent artContent = new ArtContent();
        if(!"".equals(artInfor.getContent()) && artInfor.getContent() != null){
            String content = artInfor.getContent();
            if(containsIframe(content)){
                content = replaceIframe(content);
            }
            artContent.setContent(content);
            artInfor.setContent("");
            artInforMapper.insertArtInfor(artInfor);
        }
        artContent.setArtInforId(artInfor.getId());
        return contentMapper.insertArtContent(artContent);
    }

    /**
     * 修改【文章】
     * 
     * @param artInfor 【文章】
     * @return 结果
     */
    @Override
    public int updateArtInfor(ArtInfor artInfor)
    {
        ArtContent artContent = contentMapper.selectArtContentByInforId(artInfor.getId());
        if(!"".equals(artInfor.getContent()) && artInfor.getContent() != null){
            String content = artInfor.getContent();
            if(containsIframe(content)){
                content = replaceIframe(content);
            }
            artContent.setContent(content);
            contentMapper.updateArtContent(artContent);
        }
        artInfor.setContent("");
        return artInforMapper.updateArtInfor(artInfor);
    }

    /**
     * 批量删除【文章】
     * 
     * @param ids 需要删除的【文章】主键
     * @return 结果
     */
    @Override
    public int deleteArtInforByIds(Long[] ids)
    {
        return artInforMapper.deleteArtInforByIds(ids);
    }

    /**
     * 删除【文章】信息
     * 
     * @param id 【文章】主键
     * @return 结果
     */
    @Override
    public int deleteArtInforById(Long id)
    {
        return artInforMapper.deleteArtInforById(id);
    }
    /**
     * 处理富文本
     * 判断content中是否包含<iframe>标签
     * @param content
     * @return 结果
     */
    public static boolean containsIframe(String content) {
        String iframePattern = "<iframe[^>]*>.*?</iframe>";
        Pattern pattern = Pattern.compile(iframePattern, Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(content);
        return matcher.find();
    }

    /**
     * 处理富文本
     * 替换content中的<iframe>标签
     * @param content
     * @return 结果
     */
    public static String replaceIframe(String content) {
        // 正则表达式匹配<iframe>标签及其src属性
        String iframePattern = "<iframe[^>]*src\\s*=\\s*['\"]?(https?://[^'\"]+)['\"]?[^>]*>.*?</iframe>";
        Pattern pattern = Pattern.compile(iframePattern, Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(content);
        StringBuffer sb = new StringBuffer();
        String videoTagTemplate = "<video style=\"width: 482px; height: 241px;\" controls=\"controls\" width=\"482\" height=\"241\"><source src=\"\" type=\"video/mp4\" /></video>";
        while (matcher.find()) {
            String src = matcher.group(1); // 获取src属性的值
            String replacement = videoTagTemplate.replace("src=\"\"", "src=\"" + src + "\"");
            matcher.appendReplacement(sb, Matcher.quoteReplacement(replacement));
        }
        matcher.appendTail(sb);
        return sb.toString();
    }


}
